package com.zhx.listener;

import com.sun.deploy.net.HttpRequest;
import com.zhx.bean.User;

import javax.servlet.ServletContext;
import javax.servlet.http.*;
import java.util.Hashtable;
import java.util.Map;

/**
 * 这是一个监听器，用来 监听登陆的用户
 * @author: zhx
 * @create: 2021-03-21 16:20
 **/
public class UserLoginListener implements HttpSessionListener {
    /**
     * 当用户与服务器开始session时触发这个方法
     * @param httpSessionEvent
     */
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        HttpSession session = httpSessionEvent.getSession();
        String id = session.getId();
        //System.out.println(id);
        ServletContext application = session.getServletContext();
        //第一次的session
        if(session.isNew()){
            //获取user这个session对象
            User user = (User) session.getAttribute("user");
            String username="";//用来存储登陆之后的用户名，没有登陆统一用游客来称呼
            if(user==null){
                username="游客";
            }else{
                username=user.getUsername();
            }
            //online是一个hashtable，用来存储sessionid和user对象
            Map<String,String> online = (Map<String, String>) application.getAttribute("online");
            if(online==null){//说明没有这个对象，第一次的
                online=new Hashtable<String,String>();
            }
            online.put(id, username);
            application.setAttribute("online", online);
        }
    }

    /**
     *当用户与服务器的session断开的时候触发这个方法
     * @param httpSessionEvent
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        HttpSession session = httpSessionEvent.getSession();
        String id = session.getId();
        ServletContext application = session.getServletContext();
        Map<String,String> online = (Map<String, String>) application.getAttribute("online");
        if(online!=null){
            online.remove(id);
        }
        application.setAttribute("online",online);
    }
}
